<template>
  <div class="main">
    <div class="container">
      <div class="table-operator" style="text-align:left">
        <a-button icon="plus" @click="handleAdd">添加共享</a-button>
        <a-button icon="delete" @click="handleDel">删除</a-button>
        <a-button icon="rest" @click="handleDelAll">清空全部</a-button>
      </div>
      <!-- table区域-begin -->
      <div>
        <a-table
          ref="table"
          size="middle"
          :scroll="{ x: true }"
          bordered
          row-key="id"
          :columns="columns"
          :data-source="tableData"
          :pagination="ipagination"
          :loading="loading"
          :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
          class="j-table-force-nowrap"
          @change="handleTableChange"
        />
      </div>
    </div>
    <div style="margin-top:30px;" v-if="hteFile.versionType != 4">
      <a-button
        v-if="!hteFile.processInstanceId || hteFile.status == 8"
        type="link"
        @click="handlePreview"
        style="float:left;margin-top:-6px;"
        >查看各类标准的审批权限</a-button
      >
      <a-button v-if="!hteFile.processInstanceId || hteFile.status == 8" type="primary" @click="handleSubmit"
      >提交审批
      </a-button>
      <a-button v-if="hteFile.status == 9" type="primary" @click="handleToApprval">继续审批</a-button>
    </div>
    <a-modal
      title="选择审批人员"
      :visible="showSelectAuditUser"
      :closable="false"
      centered
      @ok="doSubmit"
      @cancel="cancelSubmit"
      width="750px"
      okText="提交审批"
      cancelText="取消"
      :confirm-loading="submitLoading"
    >
      <div style="color:#000;margin-bottom: 10px;text-align:center">
        <a-button icon="export" type="primary"  @click="openUserPick">选择选人方案</a-button>
        <a-button icon="save" @click="openSaveUserPick"> 保存选人方案 </a-button>
      </div>
      <div style="width: 100%;height:500px;">
        <a-form-model>
          <a-row :gutter="24">
            <a-col :span="24" v-for="col in auditCols" :key="col.field">
              <a-form-model-item
                :required="col.required"
                :label="col.label"
                :label-col="{ span: 6 }"
                :wrapper-col="{ span: 18 }"
              >
                <a-input v-if="col.field == 'examUser'" :value="col.realname" disabled />
                <a-input
                  v-else
                  :placeholder="col.msg"
                  v-model="col.realname"
                  :read-only="true"
                  @click="selectUser(col)"
                />
              </a-form-model-item>
            </a-col>
          </a-row>
        </a-form-model>
        <div   class="btn-line-top"  >
          <a-button style="margin-left: 250px"  v-if="['试验文件-半成品质量控制标准','半成品质量控制标准','试验文件-成品质量控制标准',
          '成品质量控制标准'].includes(hteFile.fileTypeName)  && hteFile.versionType == 2" @click="handleModify">修改工单处理人</a-button>
        </div>
        <user-select ref="userSelect" @setResult="setResult" />
      </div>
    </a-modal>
    <range-modal ref="rangeRef" @saveRange="saveRange" />
    <a-modal v-model="saveUserVisible" title="保存选人方案" @ok="saveUserPick" :confirm-loading="saveUserPickLoading">
      <a-form-model ref="userPickForm" :rules="userPickRule" :model="userPick">
        <a-form-model-item
          :required="true"
          label="方案名称"
          :label-col="{ span: 6 }"
          :wrapper-col="{ span: 18 }"
           prop="schemeName"
        >
          <a-input  v-model="userPick.schemeName"   />
        </a-form-model-item>
      </a-form-model>
    </a-modal>
    <modify-modal ref="modifyRef" @getUser="handleUser"></modify-modal>
    <!-- 选择选人方案弹出框 -->
    <TableSelectModal
      selectType="radio"
      width="50vw"
      :searchPlaceholder="'请输入方案名称进行模糊查询'"
      ref="userPickSelect"
      @ok="userPickSelectOk"
      @delete="delUserPick"
      :isAllSelect="false"
      listUrl="/userPick/page"
      :isEmptyShow="false"
      keywordKey="schemeName"
      :importColumns="userPickColumn"
    ></TableSelectModal>
  </div>
</template>
<script>
import { getRiskAction, postRiskAction } from '@/api/manage';
import * as localStorage from '@/utils/localStorage';
import rangeModal from '../modules/rangeModal';
import '@/config/ht-approval.install.js';
import TableSelectModal from '@/components/tools/TableSelectModal';
import * as RequestHost from '@/api/env';
import Vue from 'vue';
import { Modal ,message} from 'ant-design-vue';
import ModifyModal from "../modules/ModifyModal";
Vue.prototype.$antMsg = message;
Vue.prototype.$antConfirm = Modal.confirm;

export default {
  components: {
    ModifyModal,
    UserSelect: () => import('@/components/tools/UserSelect'),
    rangeModal,
    TableSelectModal
  },
  props: {
    // hteFile: {
    //   type: Object,
    //   default: () => {}
    // }
  },
  data() {
    return {
      hteFile: {},
      columns: [
        {
          title: '共享类型 ',
          align: 'center',
          dataIndex: 'shareType',
          customRender: text => {
            if (text == 1) {
              return '默认共享';
            } else if (text == 2) {
              return '文件共享';
            } else if (text == 3) {
              return '分发共享';
            }
            return text;
          }
        },
        {
          title: '对象类型 ',
          align: 'center',
          dataIndex: 'objectType',
          customRender: text => {
            if (text == 1) {
              return '私有组';
            } else if (text == 2) {
              return '发送人员';
            } else if (text == 3) {
              return '组织架构';
            } else if (text == 4) {
              return '共享给所有人';
            } else if (text == 5) {
              return '岗位+组织';
            } else if (text == 6) {
              return '职序+组织';
            }

            return text;
          }
        },

        {
          title: '对象名称',
          align: 'center',
          dataIndex: 'objectName'
        },
        {
          title: '岗位',
          align: 'center',
          dataIndex: 'postion'
        },
        {
          title: '职序',
          align: 'center',
          dataIndex: 'jobOrder'
        },
        {
          title: '权限',
          align: 'center',
          dataIndex: 'authority',
          customRender: text => {
            var str = '';
            if (text && text.indexOf('1') >= 0) {
              str += '查阅,';
            }
            if (text && text.indexOf('2') >= 0) {
              str += '编辑,';
            }
            if (text && text.indexOf('3') >= 0) {
              str += '下载,';
            }
            if (text && text.indexOf('4') >= 0) {
              str += '可废除,';
            }
            if (text && text.indexOf('5') >= 0) {
              str += '一级发布,';
            }
            if (str.length > 1) {
              return str.substr(0, str.length - 1);
            }
            return str;
          }
        },
        {
          title: '创建人',
          align: 'center',
          dataIndex: 'createUserName'
        },
        {
          title: '创建时间',
          align: 'center',
          dataIndex: 'createTime'
        }
      ],
      tableData: [],
      /* 分页参数 */
      ipagination: {
        current: 1,
        pageSize: 10,
        pageSizeOptions: ['10', '30', '50', '100', '500', '1000'],
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + ' 共' + total + '条';
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0,
        name: ''
      },
      loading: false,
      title: '',
      width: 800,
      disableSubmit: false,
      dataStan: [],
      columnsStan:[
        {
          title: '文件名称',
          dataIndex: 'standardName',
          scopedSlots: { customRender: 'standardName' },
          ellipsis:true ,
          width: 240
        },

        {
          title: '编制人',
          dataIndex: 'createUserName',
          scopedSlots: { customRender: 'createUserName' },
          width: 120
        },

      ] ,
      selectedRowKeys: [],
      rowKeyIndex: -1,
      objData: [],
      classId: 1,
      defineNode:{
        discuss:false ,
        firstTrial:true ,
        trialOne:false ,
        trialTwo:false ,
        manager:true ,
      } ,
      showSelectAuditUser: false,
      showUserSelect: false,
      auditCols: [],
      currSel: null,
      chairman: 2,
      userName: '',
      submitLoading: false,
      saveUserVisible: false,
      userPick:{schemeName:''},
      userPickRule:{schemeName: [{ required: true, message: '请输入方案名称', trigger: 'blur' }]},
      userPickColumn: [
        { title: '方案名称', dataIndex: 'schemeName'},
        { title: '操作', dataIndex: 'id', width: 120, scopedSlots: { customRender: 'delete' }}
      ],
      saveUserPickLoading:false,
      modifyUser:{

      } ,
      url: {
        save: '/fileRangeStandard/add',
        list: '/fileRangeStandard/list',
        deleteBatch: '/fileRangeStandard/deleteBatch',
        deleteAll: '/fileRangeStandard/deleteAll',
        approval: '/standardInfo/approval',
        getDeinfeNode: '/defineNode/getDeinfeNode' ,
        checkBomDigit: '/bomDigit/checkBomDigit',
        saveUserPick:'/userPick/add',
        listUserPick:'/userPick/listByName',
        delUserPick:'/userPick/delete' ,
      }
    };
  },
  mounted() {
    this.userName = localStorage.getStore('userName');
  },
  methods: {
    initData() {
      this.loadRange();
    },
    setHteFile(hteFile) {
      this.hteFile = hteFile;
      this.loadRange();

      if (this.hteFile.versionType  == 3 || this.hteFile.excuteNotice == true){
        this.setNodeApproval()
      }
      else
      {
        this.defineNode = {
          discuss:false ,
          firstTrial:true ,
          trialOne:false ,
          trialTwo:false ,
          manager:true ,
        } ;
      }
      if ( [1,2].includes(this.hteFile.versionType) ){
        if (this.hteFile.excuteNotice == false){
          this.setNodeApproval();
        }else {
          this.defineNode = {
            discuss:false ,
            firstTrial:true ,
            trialOne:false ,
            trialTwo:false ,
            manager:true ,
          } ;
        }
      }

    },
    handleAdd() {
      this.$refs.rangeRef.add();
    },
    setNodeApproval(){
      let flag ;
      if (this.hteFile.excuteNotice == false)
      {
        if ([1,2].includes(this.hteFile.versionType))
        {
          flag = 2
        }
        else
        {
          flag = 5;
        }
      }
      if (this.hteFile.excuteNotice)
      {
          flag = 3
      }
      if (this.hteFile.versionType == 3){
        flag = 3
      }
      if (this.hteFile.versionType != undefined && [ 2,3].includes(flag)){
        getRiskAction(this.url.getDeinfeNode , {fileType:this.hteFile.fileType , type : flag}).then(res =>{
            if (res.code == 0){
              this.defineNode = res.data
            }
            else {
              this.defineNode = {
                discuss:false ,
                firstTrial:true ,
                trialOne:false ,
                trialTwo:false ,
                manager:true ,
              } ;
            }
        })
      }
    },
    handleModify(){
      this.$refs.modifyRef.showModal(this.hteFile.replaceOf)
    },
    handleUser(data){
        this.$set(this.modifyUser , 'standardIds' , data.standardIds)
        this.$set(this.modifyUser , 'createUsers' , data.createUsers)
    },
    saveRange(param) {
      param.fileId = this.hteFile.id;
      const that = this;
      postRiskAction(this.url.save, param).then(res => {
        if (res.code == 0) {
          this.$refs.rangeRef.close();
          that.$message.success('添加成功');
          that.loadRange();
        } else {
          that.$message.error(res.msg);
        }
      });
    },
    handleAddCancel() {
      this.addVisible = false;
    },
    loadRange() {
      if (!this.hteFile.id) {
        return false;
      }
      let param = Object.assign({}, this.ipagination);
      param.classId = this.classId;
      delete param.pageSizeOptions;
      delete param.showTotal;
      getRiskAction(this.url.list + '/' + this.hteFile.id, param).then(res => {
        if (res.code == 0) {
          if (res.data) {
            this.$set(this.ipagination, 'total', res.data.total);
            this.tableData = res.data.records;
          }
        } else {
          this.tableData = [];
          this.$set(this.ipagination, 'total', 0);
        }
      });
    },

    handleDel() {
      var that = this;
      var pass = 1;
      this.selectedRowKeys.forEach(it => {
        const rowData = that.tableData.find(v => v.id === it);
        if (rowData.shareType === 1) {
          pass = 0;
        }
      });
      if (pass == 0) {
        that.$message.error('默认共享不能删除');
        return false;
      }

      this.$confirm('确定要删除选中数据吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
        .then(() => {
          let ids = '';
          that.selectedRowKeys.forEach(key => {
            if (key > 0) {
              ids += key + ',';
            }
            const index = that.tableData.findIndex(v => v.id === key);
            that.tableData.splice(index, 1);
          });
          getRiskAction(that.url.deleteBatch, { ids: ids }).then(res => {
            if (res.code == 0) {
              that.selectedRowKeys = [];
              that.ipagination.current = 1;
              that.$message.success('删除成功');
              that.loadRange();
            } else {
              that.$message.warning(res.msg);
            }
          });
        })
        .catch(() => {
          console.log('取消删除');
        });
    },
    handleDelAll() {
      var that = this;
      this.$confirm('确定删除该文件所有共享范围数据吗,清空后不可恢复?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
        .then(() => {
          getRiskAction(that.url.deleteAll, { fileId: that.hteFile.id }).then(res => {
            if (res.code == 0) {
              that.selectedRowKeys = [];
              that.ipagination.current = 1;
              that.loadRange();
            } else {
              that.$message.warning(res.msg);
            }
          });
        })
        .catch(() => {
          console.log('取消删除');
        });
    },
    onSelectChange(selectedRowKeys) {
      this.selectedRowKeys = selectedRowKeys;
    },
    handleTableChange(pagination, filters, sorter) {
      this.ipagination = pagination;
      this.$set(this.ipagination, 'pageNo', this.ipagination.current);
      this.loadRange();
    },

    async handleSubmit() {
      console.log('标准数据' , this.hteFile)
      if (this.hteFile.fileTypeName.indexOf('成品生产配方') >= 0) {
        let pass = 1;
        const that = this;
        await getRiskAction(this.url.checkBomDigit, { standardId: this.hteFile.id }).then(res => {
          if (res.code != 0) {
            if(res.msg == '请填写数字化后再提交'){
              pass =2
            }else{
              pass = 3;
              that.$antMsg.error(res.msg);
            }
          }
        });
        if (pass == 3) {
          return false;
        }
        if(pass == 2){
          this.$antConfirm({
            content:
              '系统检测到数字化表单未提交，将无法自动触发BOM主数据工单审批流，该步骤不可逆，请确认是否继续执行！',
            okText: '确定',
            cancelText: '取消',
            onOk: () => {
              that.getAuditCols();
              that.showSelectAuditUser = true;
            }
          });
          return false;
        }
      }

      this.getAuditCols();
      this.showSelectAuditUser = true;
    },
    handleSelectOk() {
      this.showUserSelect = false;
    },
    userSelHandleCancel() {
      if (this.userSel.visible) {
        this.userSel.visible = false;
      } else if (this.userSel.visibleFunc) {
        this.userSel.visibleFunc = false;
      }
      this.showUserSelect = false;
    },
    cancelSubmit() {
      this.showSelectAuditUser = false;
    },
    doSubmit() {
      var person = { fileId: this.hteFile.id };

      if (['出口产品标签标识信息表'].includes(this.hteFile.fileTypeName)){
        this.$set( person , 'isLabelIdentification' , 1)
      }

      if (['出口产品对外公共技术信息'].includes(this.hteFile.fileTypeName)){
        this.$set( person , 'isLabelIdentification' , 0)
      }
      let pass = true;
      const that = this;
      this.auditCols.forEach(col => {
        person[col.field] = col.username;
        person[col.field + 'Name'] = col.realname;
        if (col.required == true && !col.username) {
          pass = false;
          that.$message.warning('请选择' + col.label);
        }
      });
      if (!pass) {
        return false;
      }

      if (['试验文件-半成品质量控制标准','半成品质量控制标准','试验文件-成品质量控制标准',
        '成品质量控制标准'].includes(that.hteFile.fileTypeName)  && that.hteFile.versionType == 2){

        that.$set(person , 'standardIds' , that.modifyUser.standardIds)
        that.$set(person , 'createUsers' , that.modifyUser.createUsers)
      }

      this.submitLoading = true;
      postRiskAction(this.url.approval, person).then(res => {
        if (res.code == 0) {
          that.$message.success('提交成功');
          that.showSelectAuditUser = false;
          that.hteFile = res.data;
          // that.handleToApprval();
          that.$router.push('/standard/file/view/' + that.hteFile.id + '?showRange=1&activeApproval=1');
        } else {
          this.$message.error(res.msg);
        }
        that.submitLoading = false;
      });
    },
    getAuditCols() {
      var cols = []
      if (!['出口产品标签标识信息表' , '出口产品对外公共技术信息'].includes(this.hteFile.fileTypeName)){
          cols = [
          {
            label: '会审',
            field: 'discussUser',
            username: '',
            realname: '',
            required: this.defineNode.discuss,
            min: 1,
            max: 20,
            msg: '可多选会审人员'
          },
          {
            label: '初审部门办理人',
            field: 'firstTrialUser',
            username: '',
            realname: '',
            required: this.defineNode.firstTrial,
            min: 1,
            max: 1,
            msg: '选择初审部门办理人'
          },
          {
            label: '审核1',
            field: 'trialOneUser',
            username: '',
            realname: '',
            required: this.defineNode.trialOne,
            min: 1,
            max: 1,
            msg: '选择审核人1'
          },
          {
            label: '审核2',
            field: 'trialTwoUser',
            username: '',
            realname: '',
            required: this.defineNode.trialTwo,
            min: 1,
            max: 1,
            msg: '选择审核人2'
          }
        ];
        if (this.hteFile.fileTypeName == '食品安全企业标准') {
          cols.push({
            label: '型式审查',
            field: 'examUser',
            username: 'wangyb4',
            realname: '王玉冰'
          });
        }
        cols.push({
          label: '主管领导',
          field: 'managerUser',
          username: '',
          realname: '',
          required: this.defineNode.manager,
          min: 1,
          max: 1,
          msg: '请选择主管领导'
        });
        let requiredTwo = false;
        if (
                this.hteFile.fileTypeName == '原材料质量要求' ||
                this.hteFile.fileTypeName == '包装物质量要求' ||
                this.hteFile.fileTypeName == '清洗消毒剂质量要求'
        ) {
          requiredTwo = true;
        }
        cols.push({
          label: '采购员',
          field: 'buyerUser',
          username: '',
          realname: '',
          required: requiredTwo,
          min: 1,
          max: 1,
          msg: '请选择1位采购员'
        });
        cols.push({
          label: '采购主管',
          field: 'buyerManagerUser',
          username: '',
          realname: '',
          required: requiredTwo,
          min: 1,
          max: 1,
          msg: '请选择1位采购主管'
        });

        if (['试验文件-半成品质量控制标准','半成品质量控制标准','试验文件-成品质量控制标准',
          '成品质量控制标准'].includes(this.hteFile.fileTypeName)  && this.hteFile.versionType != 2 && this.hteFile.versionType != 3) {
          cols.push({
            label: '工单通知人',
            field: 'orderNotice',
            username: '',
            realname: '',
            required: true,
            min: 1,
            max: 5,
            msg: '请起草人线外确认负责的质控人员，进行监控计划的编制'
          });
        }
      }
      if (['出口产品标签标识信息表' ].includes(this.hteFile.fileTypeName)){
          cols = [
          {
            label: '会审',
            field: 'discussUser',
            username: '',
            realname: '',
            required: false,
            min: 1,
            max: 20,
            msg: '可多选会审人员'
          },
          {
            label: '研究院学科主管',
            field: 'researchUser',
            username: '',
            realname: '',
            required: true,
            min: 1,
            max: 1,
            msg: '请选择研究院学科主管'
          },
          {
            label: '质检主管',
            field: 'qualityUser',
            username: '',
            realname: '',
            required: true,
            min: 1,
            max: 1,
            msg: '请选择质检主管意见'
          },
          {
            label: '产品研究院主管',
            field: 'productResearchUser',
            username: '',
            realname: '',
            required: true,
            min: 1,
            max: 1,
            msg: '请选择产品研究院主管'
          }
        ];
      }
      if (['出口产品对外公共技术信息'].includes(this.hteFile.fileTypeName)){
        cols = [
          {
            label: '业务部门会审人员',
            field: 'discussUser',
            username: '',
            realname: '',
            required: true,
            min: 1,
            max: 20,
            msg: '请选择业务部门会审人员'
          },
          {
            label: '事业部研究院主管',
            field: 'causeUser',
            username: '',
            realname: '',
            required: true,
            min: 1,
            max: 1,
            msg: '请选择事业部研究院主管'
          },
        ];
      }
      this.auditCols = cols;
    },
    setResult(result) {
      debugger
      if (this.currSel.max < result.length) {
        this.$message.warning('不能超过' + this.currSel.max + '人', 2);
        return;
      }
      var usernames = [];
      var realnames = [];
      if (result != null) {
        result.forEach(item => {
          usernames.push(item.username);
          realnames.push(item.realname);
        });
      }
      this.currSel.username = usernames.join(',');
      this.currSel.realname = realnames.join(',');
    },

    selectUser(col) {

      this.currSel = col;
      this.$refs.userSelect.doSelect();
    },
    doSelect() {
      this.visible = true;
    },
    handleToApprval() {
      let routeUrl = this.$router.resolve({
        path: '/standard/file/view/' + this.hteFile.id + '?showRange=1&activeApproval=1'
      });
      window.open(routeUrl.href, '_blank');
    },
    handlePreview() {
      const token = localStorage.getStore('Authorization');
      const url =
        RequestHost.baseUrl +
        '/riskchk/lib/attach/preview?Authorization=' +
        encodeURI(encodeURI(token)) +
        '&id=ef6c333ccfac4b2dad9fca071c5cc309&ftpKey=ftp';
      window.open('/risk/pdf/web/viewer.html?file=' + encodeURIComponent(url));
    },
    openSaveUserPick(){
      this.saveUserVisible=true;
    },
    openUserPick(){
      this.$refs.userPickSelect.open();
    },
    //保存选人方案
    saveUserPick(){
      const that = this;
      console.log(this.auditCols)
      this.$refs.userPickForm.validate(valid => {
        if (valid) {
          let param = [];
          that.auditCols.forEach(it=>{
            if(it.username){
              param.push({field:it.field,schemeName:that.userPick.schemeName,username:it.username,realname:it.realname})
            }
          })
          if(param.length == 0){
            that.$message.error('请选择审批人员');
            that.saveUserVisible = false;
            return ;
          }
          that.saveUserPickLoading = true;
          postRiskAction(this.url.saveUserPick, param).then(res => {
            if (res.code == 0) {
              that.$message.success('保存成功');
              that.saveUserVisible = false;
            } else {
              this.$message.error(res.msg);
            }
            that.saveUserPickLoading = false;
          });
        }
      });
    },
    userPickSelectOk(res) {
      const that = this;
      getRiskAction(this.url.listUserPick, {schemeName:res[0].schemeName}).then(res => {
        if (res.code == 0) {
          if(res.data && res.data.length>0){
            res.data.forEach(it=>{
              const col = that.auditCols.find(v => v.field == it.field)
              if(col){
                that.$set(col,'username',it.username);
                that.$set(col,'realname',it.realname);
              }
            })
          }
        } else {
          this.$message.error(res.msg);
        }
      });
    },
    delUserPick(res){
      const that = this;
      this.$antConfirm({
        content:
          '确定删除此方案吗',
        okText: '确定',
        cancelText: '取消',
        onOk: () => {
           postRiskAction(that.url.delUserPick, { schemeName: res.schemeName}).then(res => {
            if (res.code == 0) {
              that.$message.success('删除成功');
              this.$refs.userPickSelect.searchQuery();
              this.$refs.userPickSelect.onClearSelected();
            } else {
              that.$message.error(res.msg);
            }
          });
        }
      });
    }
  }
};
</script>
<style lang="scss" scoped>
  @import '@/styles/riskForm.scss';
  @import '@/styles/riskDetInfo.scss';
.main {
  background: #fff;
  padding: 20px;
  text-align: center;
  h2 {
    font-weight: 900;
    font-size: 18px;
    margin-bottom: 30px;
  }
}
::v-deep .ant-btn {
  /*width: 100px;*/
  margin: 0 10px;
}
::v-deep .ant-transfer-list .ant-btn-primary {
  color: #bbb;
}
::v-deep .ant-transfer-list:first-of-type .ant-transfer-list-header-selected {
  display: none;
}
::v-deep .ant-modal-content {
  border-radius: 15px;
}
::v-deep .ant-modal-title,
::v-deep .ant-modal-footer {
  text-align: center;
}
::v-deep .ant-transfer-operation .ant-btn-primary {
  background-color: #f5f5f5 !important;
}
::v-deep .ant-modal-header {
  border-radius: 15px 15px 0 0;
  background-image: linear-gradient(90deg, #15b1ff 0%, #1158c9 100%);
}
::v-deep .ant-modal-title {
  color: #fff;
}
</style>
